// 认证相关API
import { request } from '@/utils/request'
import type { BaseResponse } from '@/types/request'

// 登录请求参数
export interface LoginParams {
  username: string
  password: string
}

export interface MyLoginParams {
  usr: string
  enAcross: string
}

// 登录响应数据
export interface LoginResponse {
  token: string
  userInfo: {
    usr: string, // 用户名
    
    id: string | number
    username: string
    email?: string
    role?: string
    avatar?: string
    phone?: string
    department?: string
    bio?: string
    permissions?: string[]
    lastLoginTime?: string
  }
}

// 用户信息
export interface UserInfo {
  id: string | number
  username: string
  email: string
  role: string
  avatar?: string
  phone?: string
  department?: string
  bio?: string
  permissions?: string[]
  createTime?: string
  lastLoginTime?: string
}

// 修改密码参数
export interface ChangePasswordParams {
  oldPassword: string
  newPassword: string
  confirmPassword: string
}

/**
 * 认证API类
 */
export class AuthAPI {
  
  /**
   * 用户登录
   * @param params 登录参数
   * @returns 登录结果
   */
  static async login(params: MyLoginParams): Promise<BaseResponse<LoginResponse>> {
    return request.post<LoginResponse>('/api/mLogin', params)
  }

  /**
   * 用户登出
   * @returns 登出结果
   */
  static async logout(): Promise<BaseResponse<any>> {
    return request.post('/api/mLogout')
  }

  // 获取订单列表
  static async orderListBak(params: any) {
    // 尝试常见的订单API端点
    return request.post<any>('/api/orderListBak', params)
  }

  /**
   * 获取当前用户信息
   * @returns 用户信息
   */
  static async getCurrentUser(): Promise<BaseResponse<UserInfo>> {
    return request.get<UserInfo>('/api/user/current')
  }

  /**
   * 刷新token
   * @returns 新的token信息
   */
  static async refreshToken(): Promise<BaseResponse<{ token: string }>> {
    return request.post<{ token: string }>('/api/auth/refresh')
  }

  /**
   * 修改密码
   * @param params 修改密码参数
   * @returns 修改结果
   */
  static async changePassword(params: ChangePasswordParams): Promise<BaseResponse<any>> {
    return request.post('/api/user/change-password', params)
  }

  /**
   * 更新用户信息
   * @param userInfo 用户信息
   * @returns 更新结果
   */
  static async updateUserInfo(userInfo: Partial<UserInfo>): Promise<BaseResponse<UserInfo>> {
    return request.post<UserInfo>('/api/user/update', userInfo)
  }

  /**
   * 上传用户头像
   * @param file 头像文件
   * @returns 上传结果
   */
  static async uploadAvatar(file: File): Promise<BaseResponse<{ url: string }>> {
    return request.upload<{ url: string }>(
      '/api/user/avatar',
      file,
      {},
      { timeout: 60000 },
      { fieldName: 'avatar' }
    )
  }

  /**
   * 验证token是否有效
   * @returns 验证结果
   */
  static async validateToken(): Promise<BaseResponse<{ valid: boolean, userInfo?: UserInfo }>> {
    return request.get<{ valid: boolean, userInfo?: UserInfo }>('/dragon/auth/validate')
  }

  /**
   * 发送验证码（用于密码重置等）
   * @param email 邮箱地址
   * @returns 发送结果
   */
  static async sendVerificationCode(email: string): Promise<BaseResponse<any>> {
    return request.post('/api/auth/send-code', { email })
  }

  /**
   * 重置密码
   * @param params 重置密码参数
   * @returns 重置结果
   */
  static async resetPassword(params: {
    email: string
    code: string
    newPassword: string
  }): Promise<BaseResponse<any>> {
    return request.post('/api/auth/reset-password', params)
  }
}

export default AuthAPI 